﻿#include <cmdline.h>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
  //创建一个cmdline命令解析器
  cmdline::parser cmd;

  /*
  * add函数参数说明
  * 参数一：长名称
  * 参数二：短名称 (输入'\0'表示没有短名称)
  * 参数三：参数描述
  * 参数四：bool值，false表示该参数可选，true表示该参数必填
  * 参数五：参数默认值，参数四为false时候，该参数生效
  * 参数六：对参数的限制，如：cmdline::range(1, 65535)); 表示参数须在1--65535之间，cmdline::oneof<string>("http", "https", "ssh", "ftp")表示只能在这四个中选择
  * 
  */
  cmd.add<string>("host", 'h', "host name", true, "");
  cmd.add<int>("port", 'p', "port number", false, 80, cmdline::range(1, 65535));
  cmd.add<string>("type", 't', "protocol type", false, "http",
    cmdline::oneof<string>("http", "https", "ssh", "ftp"));
  

  // 也能够定义bool值
  // 通过调用不带类型的add方法
  cmd.add("gzip", '\0', "gzip when transfer");


  /*
  * 执行解析器
  * 仅仅有当全部的參数都有效时他才会返回
  * 假设有无效參数，解析器会输出错误消息。然后退出程序
  * 假设有'--help'或-?
  * '这种帮助标识被指定，解析器输出帮助信息。然后退出程序
  */

  cmd.parse_check(argc, argv);
  // 获取输入的參数值
  cout << cmd.get<string>("type") << "://" 
       << cmd.get<string>("host") << ":" 
       << cmd.get<int>("port")
       << endl;
  // bool值能够通过调用exsit()方法来推断
  if (cmd.exist("gzip"))
    cout << "gzip" << endl;
  //执行：gt_cmdline_test.exe  -h leon -p 88  -t ssh --gzip
  return 0;
}